//进阶版冒泡排序
public class code {
    private static void sort(int [] array) {
        //无序数组的边界，每次到这里为止
        int arrBoundary = array.length -1;
        //最后一次交换元素的下标
        int lastSwapIndex = 0;
        //i代表趟数
        for (int i = 0; i < array.length-1; i++) {
            //有序标记flg，每一轮的初始都是true
            boolean flg = true;
            //交换直接从上次最后交换的记录点开始
            for (int j = 0; j < arrBoundary; j++) {
                if(array[j]>array[j+1]) {
                    int tmp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = tmp;
                    //有元素交换，代表不是有序，标记为false
                    flg = false;
                    //记录最后一次交换元素的位置，下次一趟排序中就直接从这个元素开始
                    lastSwapIndex = j;
                }
            }
            arrBoundary = lastSwapIndex;
            //如果这轮排序没有交换，就代表后面的元素都是有序的
            if(flg) {
                break;
            }
        }
    }

}
